#pragma once
#include <string>
#include "image.h"
#include <vector>
#include "color.h"

struct OneFrame
{
	int x;
	int y;
	int w;
	int h;
	Image *img;
};

class SAPPHIRE_ENGINE Animation
{
public:
	Animation(const std::string &name,float speed);
	~Animation();

	void NextFrame(Image *img);
	void NextFrame(Image *img, int x, int y, int w, int h){}
	void NextFrame(const std::string &file);
	void NextFrame(const std::string &file, const Color &clr);

	void NextMassFrame(Image *img, int w, int h);
	void NextMassFrame(const std::string &file, const Color &clr, int w, int h);

	void Draw(int n, float x, float y);
	void Play(int x, int y);
	
	void PlayStretch(int x, int y, int w, int h);
	void PlayStretch(float x, float y, float w, float h);

	void SetLoop(bool loop){_loop = loop;}
	int GetFrame(){return _curframe;}
	int GetMaxFrame();

	void Clear();
	void Reset();

	bool IsEnd();


private:
	std::string _name;
	std::vector<OneFrame> _frame;
	int _curframe;
	float _speed;
	float _stepspeed;
	bool _loop;
	bool _reverse;
	float _animationTime;

};